package cn.gok.oa.util;

import lombok.Data;

@Data
public class ResultData<T> {
    /**
     * 固定状态码”0“  成功
     */
    private static final String SUCCESS="0";

    /**
     * 固定状态码”1“  失败
     */
    private static final String FAIL="1";

    /**
     * 自定义状态码
     */
    private String code;

    /**
     * 响应信息
     */
    private String msg;

    /**
     * 泛型 响应数据
     */
    private T Data;

    /**
     * 计数
     * 分页
     */
    private Long count;

    /**
     * 无参构造
     */
    public ResultData(){}

    /**
     *  4参构造
     * @param code 响应码
     * @param msg 响应消息
     * @param data 响应数据
     * @param count 条数
     */
    public ResultData(String code, String msg, T data, Long count){
        this.code=code;
        this.msg=msg;
        Data = data;
        this.count = count;
    }

    /**
     *  3参构造
     * @param code 响应码
     * @param msg 响应消息
     * @param data 响应数据
     */
    public ResultData(String code, String msg, T data){
        this.code=code;
        this.msg=msg;
        Data = data;
    }

    /**
     * 操作成功，无返回数据
     */
    public static ResultData success(){
        return new ResultData(SUCCESS,"操作成功",null);
    }

    /**
     * 操作失败，无返回数据
     */
    public static ResultData fail(){
        return new ResultData(FAIL,"操作失败",null);
    }

    /**
     * 自定义状态码、返回消息
     * @param code 状态码
     * @param msg 返回消息
     * @return
     */
    public static ResultData buildMsg(String code, String msg){
        return new ResultData(code,msg,null);
    }

    /**
     * 操作成功，返回数据
     * @param data 返回数据
     */
    public static <T>ResultData buildData(T data){
        return new ResultData(SUCCESS,"操作成功",data);
    }

    /**
     * 分页查询
     * @param data 返回数据
     * @param count 返回条数
     */
    public static <T> ResultData page(T data,Long count){
        return new ResultData(SUCCESS,"操作成功",data,count);
    }
}
